package com.syg.servlet04;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

/**
 * 表单重复提交的3种情况：
 *          1,场景一：在网络延迟的情况下让用户有时间点击多次submit按钮导致表单重复提交
 *              方法：利用JavaScript防止表单重复提交
 *                      A,标识
 *                      B,设置提交按钮不可用
 *          2,场景二：表单提交后用户点击【刷新】按钮导致表单重复提交
 *          3,场景三：用户提交表单后，点击浏览器的【后退】按钮回退到表单页面后进行再次提交
 */
@WebServlet("/reSubmit")
public class _04_From_RepeatSubmit_Solve extends HttpServlet{
    int i;
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //客户端是以UTF-8编码传输数据到服务器端的，所以需要设置服务器端以UTF-8的编码进行接收，否则对于中文数据就会产生乱码
        req.setCharacterEncoding("UTF-8");
        //获取流之前设置编码格式
        resp.setContentType("text/html;charset=utf-8");
        PrintWriter respOut = resp.getWriter();
        String userName = req.getParameter("username");
        //让当前的线程睡眠3秒钟，模拟网络延迟而导致表单重复提交的现象
        try {
            Thread.sleep(3*1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        i++;
        respOut.write("我是第"+i+"次像数据库插入数据："+userName);
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //转发发生在服务端,所以不需要项目名
        req.getRequestDispatcher("/WEB-INF/JspPage/servlet04/_04_From_RepeatSubmit_Solve.jsp").forward(req,resp);
    }
}
